<?php

namespace App\Http\Controllers\User;

use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class ResetPasswordController extends Controller
{
    public function index()
    {
        //当使用update更新数据库的时候,更新完成会返回这次更新受影响的行数,有个需要注意的是当返回0可能是一行也没改,也可能是改了一行,但是改的和之前一样,这个时候受影响的行数还是0.
//        dd(User::where('email','subian@su')->update(['password'=>'suiian']));
        return view('user.reset_password');
    }

    //注册验证保存的方法
    public function update(Request $request)
    {
//        dd($request);
        //当某个Request验证需要复用的时候可以单独建立Request请求类,当需要对前台提交过来的数据验证的时候可以调用之前的Request类
        //但是当某个验证不需要复用的时候,就可以直接在控制器中调用当前对象的validate()方法进行验证,规则写法和Request中的写法一致
        $this->validate($request,[
            //唯一性验证的时候要指定在哪个后台数据表中验证哪个字段,不写就取前面的键名
            'password'=>'required|confirmed',
            'code'=>'required'
        ],[
            'password.required'=>'密码不能为空',
            'password.confirmed'=>'密码不一致',
            'code.required'=>'验证码不能为空'
        ]);
        //上面的验证通过以后,接着需要判断用户输入的验证码和邮箱是不是和发送的验证码一致
        //这里使用&&语句,只有&&前后的判断条件都为真的时候才为true,否则为false,然后将判断结果返回给$rule
        $status = session('register.email') == $request->input('email') &&
            session('register.code') == $request->input('code');
        if (!$status){
            return back()->with('error','验证码错误或者邮箱不一致');
        }
//        可以通过User对象调用create()方法,向模型对应的数据表中创建一条新的数据
//        $user->create($data);
        //也可以直接通过User类静态调用create()方法创建数据
        //修改数据直接调用update方法.(但是这个时候有个问题,当用户在修改密码界面中,输入了一个没有注册过的邮箱,这个时候直接使用update()就有问题,所以需要先判断下用户的邮箱是不是已经注册了)
//        User::where('email',$data['email'])->update(['password'=>$data['password']]);
        //通过邮箱匹配在user数据表中查找数据,由于邮箱唯一,所以从查找的结果集合中取第一条结果就行
         $user = User::where('email',$request->input('email'))->first();
        if ($user){
            //进入到这个判断体中说明找到了要操作的数据对象,然后修改对象中对应的属性,并save保存就行了
            $user['password'] = bcrypt($request->input('password'));
            //调用$user对象的save()方法,将修改后的属性保存到数据库中
            $user->save();
            return redirect(route('login'))->with('success','修改密码成功');
        }
        return back()->with('error','邮箱不存在,密码修改失败');
    }
}
